﻿#pragma once
#ifndef WRWORKDRIVER_H
#define WRWORKDRIVER_H

#include "WRWorkEntity.h"
#include "WRWorkDaemon.h"

//声明工作设备类。
class WRWorkDevice;

//表示工作驱动。
class WRSOFT_WORKING_COMMON_CLASS WRWorkDriver : public WRWorkEntity
{
    friend class WRWorkDaemon;

private:
    //所属工作程序。
    WRWorkDaemon* m_daemon;
    //工作设备集合。
    WRArray<WRWorkDevice*> m_devices;

    //禁止复制构造函数和赋值操作符。
    Q_DISABLE_COPY(WRWorkDriver)

protected:    
    //设置工作设备集合。。
    inline void devices(const WRArray<WRWorkDevice*>& value)
    {
        m_devices = value;
    }

    //初始化工作驱动。
    WRWorkDriver(const WRWorkInformation& info, WRWorkDaemon* daemon);
    //清理当前对象所占用的相关资源。
    ~WRWorkDriver(void);

public:
    //添加对象引用。
    inline void addRef(void)
    {
        m_daemon->addRef();
    }
    //释放对象引用, 如果引用计数为0，则删除对象，返回True，否则返回False。
    inline bool release(void)
    {
        return m_daemon->release();
    }

    //获取当前驱动所属的工作进程。
    inline WRWorkDaemon* daemon(void) const
    {
        return m_daemon;
    }

    //获取工作设备集合。
    inline const WRArray<WRWorkDevice*>& devices(void) const
    {
        return m_devices;
    }

    //获取包含的设备数量。
    inline WRu count(void) const
    {
        return m_devices.count();
    }
    //获取指定索引的设备。
    inline WRWorkDevice* index(WRu i)
    {
        return m_devices[i];
    }
};

#endif // WRWORKDRIVER_H
